package com.xbongbong.workflow.pojo.nodes;

import com.xbongbong.workflow.pojo.WorkflowNodeCoreConfiguration;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * 工作流节点
 * @author 吴峰
 * @date 2021/05/11 10:35
 */
@Getter
@Setter
@ToString
public class WorkflowNodePojo implements Serializable {

    private static final long serialVersionUID = 7126375546228463303L;

    @NotEmpty(message = "{dto.msg.WorkflowNodePojo.name.NotEmpty}")
    @Length(max = 50, message = "{dto.msg.WorkflowNodePojo.name.Length}")
    private String name;

    /**
     * 1. 0 非触发节点，1 表单事件触发，2 时间触发，3 时间字段触发 4 webhook触发 5 员工事件触发 6 自定义触发方式
     * @see com.xbongbong.workflow.config.enums.WorkflowTriggerMethodEnum
     */
    @NotNull(message = "{dto.msg.WorkflowNodePojo.triggerType.NotNull}")
    private Integer triggerType;

    /**
     * 1.开始节点，2.结束节点，3.流程节点，4.抄送节点 ，5.条件节点，6条件块节点，11. 新建记录节点，12. 更新记录节点，13.删除记录节点，14.获取多条数据节点, 21. 发送消息节点
     * @see com.xbongbong.workflow.enums.WorkflowNodeTypeEnum
     */
    @NotNull(message = "{dto.msg.WorkflowNodePojo.type.NotNull}")
    private Integer type;

    @NotNull(message = "{dto.msg.appId.NotNull}")
    private Long appId;
    /**
     * 触发表单菜单id
     */
    @NotNull(message = "{dto.msg.menuId.NotNull}")
    private Long menuId;
    /**
     * 触发表单表单id
     */
    @NotNull(message = "{dto.msg.formId.NotNull}")
    private Long formId;
    /**
     * 触发表单saas标识
     */
    @NotNull(message = "{dto.msg.saasMark.NotNull}")
    private Integer saasMark;
    /**
     * 触发表单业务类型
     */
    @NotNull(message = "{dto.msg.businessType.NotNull}")
    private Integer businessType;

    /**
     * 前端所需唯一标识
     */
    @NotEmpty(message = "{dto.msg.WorkflowNodePojo.nodeId.NotEmpty}")
    private String nodeId;

    /**
     * 上级节点id
     */
    @NotEmpty(message = "{dto.msg.WorkflowNodePojo.prevId.NotEmpty}")
    private String prevId;

    /**
     * 条件块节点id
     */
    private String wrapperId;

    /**
     * 优先级
     */
    private Integer priority;

    private Integer usePermission;

    /**
     * 工作流节点核心配置
     */
    @Valid
    @NotNull(message = "{dto.msg.WorkflowNodePojo.coreConfiguration.NotNull}")
    private WorkflowNodeCoreConfiguration coreConfiguration;
}
